package uva.asimov.asimovtrainner;

import java.io.File;
import java.net.URISyntaxException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class ImportXML extends Activity {

	private static final String ASIMOV = MainActivity.class.getSimpleName();
	
	private String tipo;
	private String descripcion;
	private String fecha;
	private String duracion;
	private String distancia;
	private String velocidad;
	private String otros;
	private String ubicacion;

	private static final int FILE_SELECT_CODE = 0;
	private DataBaseManager manager;
	
	private Button btnSeleccionarFichero;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_import_xml);
		
		manager = new DataBaseManager(this);
		
		
		btnSeleccionarFichero = (Button) findViewById(R.id.btnSeleccionarFichero);
		btnSeleccionarFichero.setOnClickListener(new OnClickListener() {

			public void onClick(View view) {
				showFileChooser();
			}
		});
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.import_xml, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// Handle action bar item clicks here. The action bar will
		// automatically handle clicks on the Home/Up button, so long
		// as you specify a parent activity in AndroidManifest.xml.
		int id = item.getItemId();
		if (id == R.id.action_settings) {
			return true;
		}
		return super.onOptionsItemSelected(item);
	}
	
	
	private void showFileChooser() {
		Log.d(ASIMOV, "En file chooser");
	    Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
	    intent.setType("*/*"); 
	    intent.addCategory(Intent.CATEGORY_OPENABLE);

	    try {
	        startActivityForResult(
	                Intent.createChooser(intent, "Select a File to Upload"),
	                FILE_SELECT_CODE);
	        Log.d(ASIMOV, "File Uri: PEDIDO");
	    } catch (android.content.ActivityNotFoundException ex) {
	        // Potentially direct the user to the Market with a Dialog
	        Toast.makeText(this, "Please install a File Manager.", 
	                Toast.LENGTH_SHORT).show();
	    }
	}

	/*@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
	    Log.d(ASIMOV, "File Uri: PENDIENTE");
	    switch (requestCode) {
	        case FILE_SELECT_CODE:
	        if (resultCode == RESULT_OK) {
	            // Get the Uri of the selected file 
	            Uri uri = data.getData();
	            Log.d(ASIMOV, "File Uri: " + uri.toString());
	            // Get the path
	           // String path = FileUtils.getPath(this, uri);
	         //   Log.d(ASIMOV, "File Path: " + path);
	            // Get the file instance
	            // File file = new File(path);
	            // Initiate the upload
	        }
	        break;
	    }
	    super.onActivityResult(requestCode, resultCode, data);
	}
	
	public static String getPath(Context context, Uri uri) throws URISyntaxException {
	    if ("content".equalsIgnoreCase(uri.getScheme())) {
	        String[] projection = { "_data" };
	        Cursor cursor = null;

	        try {
	            cursor = context.getContentResolver().query(uri, projection, null, null, null);
	            int column_index = cursor.getColumnIndexOrThrow("_data");
	            if (cursor.moveToFirst()) {
	                return cursor.getString(column_index);
	            }
	        } catch (Exception e) {
	            // Eat it
	        }
	    }
	    else if ("file".equalsIgnoreCase(uri.getScheme())) {
	        return uri.getPath();
	    }

	    return null;
	} 
	*/
	
	/**
	 * Recoge los valores de los entrenamientos contenidos en el fichero XML y los introduce en la base de datos.
	 * 
	 * @param ficheroXML con los entrenamientos a importar
	 */
	public void fromXML(File ficheroXML){
		try{
			DocumentBuilderFactory domParserFactory =DocumentBuilderFactory.newInstance();
			DocumentBuilder parser = domParserFactory.newDocumentBuilder();
			org.w3c.dom.Document doc = parser.parse(ficheroXML);
			doc.getDocumentElement().normalize();
			NodeList nList = doc.getElementsByTagName("entrenamiento");
			int i=0;
			 //Insertará tantos entrenamientos en la base de datos como contenga el documento
			for (i=0;i<nList.getLength();i++){
				Node nodo_actual =nList.item(i);
				if (nodo_actual.getNodeType() == Node.ELEMENT_NODE) {
					
					org.w3c.dom.Element elemento = (org.w3c.dom.Element) nodo_actual;
					//Actualiza el valor de los campos de entrenamiento
					limpiaCampos();
					tipo=elemento.getAttribute("tipo");
					descripcion=elemento.getAttribute("descripcion");
					fecha=elemento.getAttribute("fecha");
					duracion=elemento.getAttribute("duracion");
					distancia=elemento.getAttribute("distancia");
					velocidad=elemento.getAttribute("velocidad");
					otros=elemento.getAttribute("otros");
					ubicacion=elemento.getAttribute("ubicacion");
					manager.insertar(tipo, descripcion, fecha, duracion, distancia,
							velocidad, otros, ubicacion);
				}//end if
			}//end for
		}catch(Exception e){
			System.out.printf("Error parsing file ");
		}
	}

	private void limpiaCampos(){
		tipo="";
		descripcion="";
		fecha="";
		duracion="";
		distancia="";
		velocidad="";
		otros="";
		ubicacion="";
	
	}
	

}
